/*(c) Copyright 2018 wangxiang. All Rights Reserved. 
 *2018-12-27
 * */
var validate = {
	isvalidate: true,
	rulesandmsg: {},
	errorobj:[],
	messages: {
		required: "这是必填字段",
		remote: "请修正此字段",
		email: "请输入有效的电子邮件地址",
		phone: "请输入有效的手机号码",
		url: "请输入有效的网址",
		date: "请输入有效的日期",
		dateISO: "请输入有效的日期 (YYYY-MM-DD)",
		number: "请输入有效的数字",
		digits: "只能输入数字",
		creditcard: "请输入有效的信用卡号码",
		equalTo: "两次输入的不一致",
		extension: "请输入有效的后缀",
		length:"长度必须为{0}位"  
	},
	//初始化表单校验 绑定所有失焦校验
	init: function(rulesandmsg) {
		validate.rulesandmsg = rulesandmsg;
		jQuery.each(rulesandmsg.rules, function(key, value) {
			$('#' + key).blur(function() {
				if(jQuery.isPlainObject(rulesandmsg.rules[key])) {
					jQuery.each(rulesandmsg.rules[key], function(rkey, rvalue) {
						if(rkey == 'required' && rvalue == true) {
							if($('#' + key).is(':visible')&&$('#' + key).val() == '') {
								validate.isvalidate = false;
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'length') {
							if($('#' + key).is(':visible')&&$('#' + key).val().length != rvalue) {
								validate.isvalidate = false;
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey].replace('{0}',rvalue));
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'phone') {
							if($('#' + key).is(':visible')&&isPhoneNo($('#' + key)) != rvalue) {
								validate.isvalidate = false;
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'email') {
							if($('#' + key).is(':visible')&&isEmail($('#' + key)) != rvalue) {
								validate.isvalidate = false;
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'equalTo') {
							if($('#' + key).is(':visible')&&$('#' + key).val() != $('#' + rvalue).val()) {
								validate.isvalidate = false;
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
					})
				} else {
					if(value == 'required') {
						if($('#' + key).is(':visible')&&$('#' + key).val() == '') {
							validate.isvalidate = false;
							validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key]:validate.messages[value]);
						} else {
							validate.validateError($('#' + key), '');
						}
					}
				}
			})
		});
	},
	//提交校验所有表单
	submitForm: function(rulesandmsg) {
		validate.isvalidate = true;
		if (!rulesandmsg) {
			rulesandmsg = validate.rulesandmsg;
		}
		errorobj =[];
		jQuery.each(rulesandmsg.rules, function(key, value) {
				if(jQuery.isPlainObject(rulesandmsg.rules[key])) {
					jQuery.each(rulesandmsg.rules[key], function(rkey, rvalue) {
						if(rkey == 'required' && rvalue == true) {
							if($('#' + key).is(':visible')&&$('#' + key).val() == '') {
								validate.isvalidate = false;
								errorobj.push('#' + key);
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'length') {
							if($('#' + key).is(':visible')&&$('#' + key).val().length != rvalue) {
								validate.isvalidate = false;
								errorobj.push('#' + key);
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey].replace('{0}',rvalue));
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'phone') {
							if($('#' + key).is(':visible')&&isPhoneNo($('#' + key)) != rvalue) {
								validate.isvalidate = false;
								errorobj.push('#' + key);
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'email') {
							if($('#' + key).is(':visible')&&isEmail($('#' + key)) != rvalue) {
								validate.isvalidate = false;
								errorobj.push('#' + key);
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
						if(rkey == 'equalTo') {
							if($('#' + key).is(':visible')&&$('#' + key).val() != $('#' + rvalue).val()) {
								validate.isvalidate = false;
								errorobj.push('#' + key);
								validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key][rkey]:validate.messages[rkey]);
								return false;
							} else {
								validate.validateError($('#' + key), '');
							}
						}
					})
				} else {
					if(value == 'required') {
						if($('#' + key).is(':visible')&&$('#' + key).val() == '') {
							validate.isvalidate = false;
							errorobj.push('#' + key);
							validate.validateError($('#' + key), rulesandmsg.messages[key]?rulesandmsg.messages[key]:validate.messages[value]);
						} else {
							validate.validateError($('#' + key), '');
						}
					}
				}
		});
		//聚焦错误选项
		$(errorobj[0]).focus();
		return validate.isvalidate;
	},
	validateError: function(obj, str) {
		//showTopTip(str);
		var li = $(obj).parent().parent();
		$(li).find('.error-tips').remove();
		if(str == '') {
			$(li).removeClass('error');
			$(li).find('.error-tips').remove();
		} else {
			$(li).append('<span class="error-tips">' + str + '</span>');
			$(li).addClass('error');
		}
	}
}